package com.itfreer.esb.proxy;

import java.util.Date;
import java.util.List;

import com.itfreer.esb.cilent.resultinfo.IpCountResultInfo;
import com.itfreer.esb.cilent.resultinfo.MonthCountResultInfo;
import com.itfreer.esb.cilent.resultinfo.ResultInfo;
import com.itfreer.esb.cilent.resultinfo.ServerCountResultInfo;
import com.itfreer.esb.cilent.resultinfo.UserCountResultInfo;
import com.itfreer.esb.param.EProxyType;
/**
 * esb服务代理类
 * @author gj
 *
 */
public interface IEsbProxy {
	/**
	 * 注册功能
	 * @param Url 功能地址
	 * @param byTime 服务有效期结束时间（永久时间为空）
	 * @param type 服务类型
	 * @return
	 */
	public ResultInfo registerProxy(EProxyType type,String url,Date byTime);
	
	/**
	 * 修改代理功能是否可以使用
	 * @param type 服务类型
	 * @param proxyUrl
	 * @param canuse
	 * @param byTime 服务有效期结束时间（永久时间为空）
	 * @return
	 */
	public ResultInfo modifyProxy(EProxyType type,String proxyUrl,boolean canuse,Date byTime);
	
	/**
	 * 修改功能是否可以使用
	 * @param type 服务类型
	 * @param proxyUrl
	 * @param canuse
	 * @return
	 */
	public ResultInfo modify(EProxyType type,String Url,boolean canuse);
	
	/**
	 * 功能访问统计
	 * @param type 服务类型
	 * @param Url 功能地址
	 * @return
	 */
	public ResultInfo getUseCount(EProxyType type,String Url);
	
	/**
	 * 统计访问访问最多前n个ip
	 * @param type 服务类型
	 * @param Url 功能地址
	 * @param length统计个数
	 * @return
	 */
	public IpCountResultInfo getUseCountByIp(EProxyType type,String Url,int n);
	
	/**
	 * 统计服务最近n个月的访问量
	 * @param type 服务类型
	 * @param Url 功能地址
	 * @param length 统计个数
	 * @return
	 */
	public MonthCountResultInfo getUseCountByMonth(EProxyType type,String Url,int n);
	
	/**
	 * 统计服务访问最多的用户
	 * @param type 服务类型
	 * @param Url 功能地址
	 * @param length 统计个数
	 * @return
	 */
	public UserCountResultInfo getUseCountByProxy(EProxyType type,String Url,int n);
	
	/**
	 * 获取访问最多的n个服务
	 * @return
	 */
	public ServerCountResultInfo getUseCountByServer(int n);
	
	/**
	 * 删除功能，同时也会删除功能的访问统计
	 * @param type 服务类型
	 * @param serverUrl 服务地址
	 * @return
	 */
	public ResultInfo delete(EProxyType type,String Url);
	
	/**
	 * 删除代理功能
	 * @param type 服务类型
	 * @param proxyUrl 服务地址
	 * @return
	 */
	public ResultInfo deleteProxy(EProxyType type,String proxyUrl);
	
	/**
	 * 给功能添加黑明
	 * @param type 服务类型
	 * @param Url 功能地址
	 * @param blackList 黑名单列表
	 * @return
	 */
	public ResultInfo AddBlackList(EProxyType type,String Url,List<String> blackList);
	
	/**
	 * 移除功能黑明单
	 * @param type 服务类型
	 * @param Url 功能地址
	 * @param blackList 黑名单列表
	 * @return
	 */
	public ResultInfo removeBlackList(EProxyType type,String Url,List<String> blackList);
}
